/***********************************************************************************
 @file   
 @author
 @attention
 ***********************************************************************************/
#include "mid_timer.h"
/***********************************************************************************
 * @global param
***********************************************************************************/
uint64_t test_cnt = 0;
/***********************************************************************************
 * @brief  初始化定时器
 * @param  Timer3 配置; 16分频,周期2500-->2500*(1/4M) * 16 = 10000us = 10ms
***********************************************************************************/
void timer3_init(uint16_t period)
{
    uint16_t                    u16ArrValue;
    uint16_t                    u16CntValue;
    stc_tim3_mode0_cfg_t     stcTim3BaseCfg;
    
    //结构体初始化清零
    DDL_ZERO_STRUCT(stcTim3BaseCfg);
    
    Sysctrl_SetPeripheralGate(SysctrlPeripheralTim3, TRUE); //Base Timer外设时钟使能
    
    stcTim3BaseCfg.enWorkMode = Tim3WorkMode0;              //定时器模式
    stcTim3BaseCfg.enCT       = Tim3Timer;                  //定时器功能，计数时钟为内部PCLK
    stcTim3BaseCfg.enPRS      = Tim3PCLKDiv16;              //PCLK/16
    stcTim3BaseCfg.enCntMode  = Tim316bitArrMode;           //自动重载16位计数器/定时器
    stcTim3BaseCfg.bEnTog     = FALSE;
    stcTim3BaseCfg.bEnGate    = FALSE;
    stcTim3BaseCfg.enGateP    = Tim3GatePositive;
    
    Tim3_Mode0_Init(&stcTim3BaseCfg);                       //TIM3 的模式0功能初始化
        
    u16ArrValue = 0x10000 - period ;
    
    Tim3_M0_ARRSet(u16ArrValue);                            //设置重载值(ARR = 0x10000 - 周期)
    
    u16CntValue = 0x10000 - period;
    
    Tim3_M0_Cnt16Set(u16CntValue);                          //设置计数初值
    
    Tim3_ClearIntFlag(Tim3UevIrq);                          //清中断标志
    Tim3_Mode0_EnableIrq();                                 //使能TIM3中断(模式0时只有一个中断)
    EnableNvic(TIM3_IRQn, IrqLevel0, TRUE);                 //TIM3 开中断 
    
    Tim3_M0_Run();   //TIM3 运行。
}

/***********************************************************************************
 * @brief  取消初始化定时器
***********************************************************************************/
void timer3_deinit(void)
{
    Tim3_M0_Stop();
}
 /***********************************************************************************
 * @brief  TIM3中断服务函数
 * @param 
***********************************************************************************/
void Tim3_IRQHandler(void)
{
    if(TRUE == Tim3_GetIntFlag(Tim3UevIrq)) //Timer3 模式0 计时溢出中断
    {      
        button_scan();
        system_timer();
        sleep_timer();
        led_check_timer();
        lcd_password_flicker_timer();   
        wt588_timer();
        lora_timer();
        
        Tim3_ClearIntFlag(Tim3UevIrq);  //Timer3模式0 中断标志清除
    }
}